package com.demo.sensor;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.example.myalldemo.R;

/**
 * SensorMannager传感器管理对象 getSystemService(SENSOR_SERVICE)方法就可以拿到当前手机的传感器管理对象。
 * 
 * 上例代码中 float x y z 3个方向的取值范围是在 -10 到 10 之间，我向同学们说明一下 X轴 Y轴 Z轴 重力分量的含义。
 * 这里须要注意的是坐标原点 向天空为正数 向地面为负数 刚好与编程时坐标是相反的。
 * 
 * 手机屏幕向左侧方当X轴就朝向天空，垂直放置 这时候 Y 轴 与 Z轴没有重力分量，因为X轴朝向天空所以它的重力分量则最大 。 这时候X轴 Y轴
 * Z轴的重力分量的值分别为（10，0，0）
 * 
 * 手机屏幕向右侧方当X轴就朝向地面，垂直放置 这时候 Y 轴 与 Z轴没有重力分量，因为X轴朝向地面所以它的重力分量则最小 。 这时候X轴 Y轴
 * Z轴的重力分量的值分别为（-10，0，0）
 * 
 * 手机屏幕垂直竖立放置方当Y轴就朝向天空，垂直放置 这时候 X 轴 与 Z轴没有重力分量，因为Y轴朝向天空所以它的重力分量则最大 。 这时候X轴 Y轴
 * Z轴的重力分量的值分别为（0，10，0）
 * 
 * 手机屏幕垂直竖立放置方当Y轴就朝向地面，垂直放置 这时候 X 轴 与 Z轴没有重力分量，因为Y轴朝向地面所以它的重力分量则最小 。 这时候X轴 Y轴
 * Z轴的重力分量的值分别为（0，-10，0）
 * 
 * 手机屏幕向上当Z轴就朝向天空，水平放置 这时候 X 轴与Y轴没有重力分量，因为Z轴朝向天空所以它的重力分量则最大 。 这时候X轴 Y轴
 * Z轴的重力分量的值分别为（0，0，10）
 * 
 * 手机屏幕向上当Z轴就朝向地面，水平放置 这时候 X 轴与Y轴没有重力分量，因为Z轴朝向地面所以它的重力分量则最小 。 这时候X轴 Y轴
 * Z轴的重力分量的值分别为（0，0，-10）
 * 
 */
public class MainSensorActivity extends Activity {

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sensor_main);

		// 准备显示信息的UI组建
		final TextView tx1 = (TextView) findViewById(R.id.TextView01);

		// 从系统服务中获得传感器管理器
		SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

		// 从传感器管理器中获得全部的传感器列表
		List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);

		// 显示有多少个传感器
		tx1.setText("经检测该手机有" + allSensors.size() + "个传感器，他们分别是：\n");

		// 显示每个传感器的具体信息
		for (Sensor s : allSensors) {

			String tempString = "\n" + "  设备名称：" + s.getName() + "\n"
					+ "  设备版本：" + s.getVersion() + "\n" + "  供应商："
					+ s.getVendor() + "\n";

			switch (s.getType()) {
			case Sensor.TYPE_ACCELEROMETER:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 加速度传感器accelerometer" + tempString);
				break;
			case Sensor.TYPE_GYROSCOPE:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 陀螺仪传感器gyroscope" + tempString);
				break;
			case Sensor.TYPE_LIGHT:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 环境光线传感器light" + tempString);
				break;
			case Sensor.TYPE_MAGNETIC_FIELD:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 电磁场传感器magnetic field" + tempString);
				break;
			case Sensor.TYPE_ORIENTATION:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 方向传感器orientation" + tempString);
				break;
			case Sensor.TYPE_PRESSURE:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 压力传感器pressure" + tempString);
				break;
			case Sensor.TYPE_PROXIMITY:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 距离传感器proximity" + tempString);
				break;
			case Sensor.TYPE_TEMPERATURE:
				tx1.setText(tx1.getText().toString() + s.getType()
						+ " 温度传感器temperature" + tempString);
				break;
			default:
				tx1.setText(tx1.getText().toString() + s.getType() + " 未知传感器"
						+ tempString);
				break;
			}
		}

	}

	public void sensorclick(View v) {
		Intent i;
		switch (v.getId()) {
		case R.id.btn_ball:
			i = new Intent(MainSensorActivity.this, SurfaceViewActivity.class);
			startActivity(i);
			break;
		case R.id.btn_sensordemo:
			i = new Intent(MainSensorActivity.this, SensorDemo.class);
			startActivity(i);
			break;
		case R.id.btn_sensordemo1:
			i = new Intent(MainSensorActivity.this, SensorDemo1.class);
			startActivity(i);
			break;
		case R.id.btn_sensordemo2:
			i = new Intent(MainSensorActivity.this, SensorDemo2.class);
			startActivity(i);
			break;
		case R.id.btn_gravity:
			i = new Intent(MainSensorActivity.this, SensorGravity.class);
			startActivity(i);
			break;
		default:
			break;
		}
	}
}